package com.qihoo.finance.lcs.enhance.threadpool;

import java.util.concurrent.Future;

public interface ThreadPoolService {

    /**
     *
     * @param workUnit 任务执行内容
     * @param workSeqNo 任务子序号xxx，用于拼接到日志主流水号后，形如[f70c5f7e7d934f7ca22bad3170c36823-xxx]，方便日志查询
     * @param threadPoolNameService 线程池名称
     */
    void submit(WorkUnit workUnit, String workSeqNo, ThreadPoolNameService threadPoolNameService);

    /**
     *
     * @param workUnit 任务执行内容
     * @param workSeqNo 任务子序号xxx，用于拼接到日志主流水号后，形如[f70c5f7e7d934f7ca22bad3170c36823-xxx]，方便日志查询
     * @param threadPoolNameService 线程池名称
     */
    void submit(WorkUnit workUnit, int workSeqNo, ThreadPoolNameService threadPoolNameService);

    /**
     *
     * @param workUnit 任务执行内容
     * @param workSeqNo 任务子序号xxx，用于拼接到日志主流水号后，形如[f70c5f7e7d934f7ca22bad3170c36823-xxx]，方便日志查询
     * @param threadPoolNameService 线程池名称
     */
    void submit(WorkUnit workUnit, long workSeqNo, ThreadPoolNameService threadPoolNameService);

    /**
     *
     * @param workUnitCallable 异步任务执行内容
     * @param workSeqNo 任务子序号xxx，用于拼接到日志主流水号后，形如[f70c5f7e7d934f7ca22bad3170c36823-xxx]，方便日志查询
     * @param threadPoolNameService 线程池名称
     * @param <T> 任务返回值类型
     * @return 任务返回
     */
    <T> Future<T> call(WorkUnitCallable<T> workUnitCallable, String workSeqNo, ThreadPoolNameService threadPoolNameService);

    /**
     *
     * @param workUnitCallable 异步任务执行内容
     * @param workSeqNo 任务子序号xxx，用于拼接到日志主流水号后，形如[f70c5f7e7d934f7ca22bad3170c36823-xxx]，方便日志查询
     * @param threadPoolNameService 线程池名称
     * @param <T> 任务返回值类型
     * @return 任务返回
     */
    <T> Future<T> call(WorkUnitCallable<T> workUnitCallable, int workSeqNo, ThreadPoolNameService threadPoolNameService);

    /**
     *
     * @param workUnitCallable 异步任务执行内容
     * @param workSeqNo 任务子序号xxx，用于拼接到日志主流水号后，形如[f70c5f7e7d934f7ca22bad3170c36823-xxx]，方便日志查询
     * @param threadPoolNameService 线程池名称
     * @param <T> 任务返回值类型
     * @return 任务返回
     */
    <T> Future<T> call(WorkUnitCallable<T> workUnitCallable, long workSeqNo, ThreadPoolNameService threadPoolNameService);

    /**
     *
     * @param threadPoolNameService 线程池名称
     * @return true线程池存在，false线程池不存在
     */
    boolean isExists(ThreadPoolNameService threadPoolNameService);
}
